package ar.edu.utn.frba.dds.aterrizar.busquedas;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.scalatest.prop.GeneratorDrivenPropertyChecks.ConfiguredPropertyCheck;
import org.uqbar.commons.utils.Observable;

import com.oceanic.AerolineaOceanic;

import ar.edu.utn.frba.dds.aterrizar.aerolineas.AerolineaLanchitaAdapter;
import ar.edu.utn.frba.dds.aterrizar.aerolineas.AerolineaOceanicAdapter;
import ar.edu.utn.frba.dds.aterrizar.usuarios.Usuario;

import scala.reflect.generic.Trees.This;
import uqbar.arena.persistence.Configuration;
import uqbar.arena.persistence.PersistentHome;
@Observable
public class HomeVuelos extends PersistentHome<Vuelo> implements Serializable
{
	private static final long serialVersionUID = 1L;
	private static HomeVuelos instance;
	private List<Vuelo> data = new ArrayList<Vuelo>();

	public static synchronized HomeVuelos getInstance() {
		if (instance == null) {
			instance = new HomeVuelos();
		}
		return instance;
	}

	private HomeVuelos() {
	}

	public void AgregarVuelo(Vuelo oVuelo)
	{
		create(oVuelo);
	}
	public Vuelo createExample() {
		return new Vuelo();
	}

	public Class<Vuelo> getEntityType()
	{
		return Vuelo.class;
	}

	public ArrayList<Vuelo> getAsientosOceanic()
	{
		ArrayList<Vuelo> lstRespuesta = new ArrayList<Vuelo>();
		for (Vuelo oVuelo : this.allInstances()) {
			if(oVuelo.getAerolinea() != null && oVuelo.getAerolinea().equals(AerolineaOceanicAdapter.getInstance()))
			{
				lstRespuesta.add(oVuelo);
			}
		}
		return lstRespuesta;
	}
	public ArrayList<Vuelo> getAsientosLanchita()
	{
		ArrayList<Vuelo> lstRespuesta = new ArrayList<Vuelo>();
		for (Vuelo oVuelo : this.allInstances()) {
			if(oVuelo.getAerolineaDenominacion() == "Lanchita")
			{
				lstRespuesta.add(oVuelo);
			}
		}
		return lstRespuesta;
	}
	
	public ArrayList<Vuelo> getReservasPorUsuario(Usuario usuario) {
		return buscarPorEstadoYDNI(usuario, "R");
	}
	
	public ArrayList<Vuelo> getComprasPorUsuario(Usuario usuario) {
		return buscarPorEstadoYDNI(usuario, "C");
	}
	
	public ArrayList<Vuelo> buscarPorEstadoYDNI(Usuario usuario, String estado){
		ArrayList<Vuelo> listaVuelos = new ArrayList<Vuelo>();
		for(Vuelo vuelo : this.allInstances()){
			if(vuelo.getDnicomprador() != null && vuelo.getDnicomprador().equals(usuario.getDNI()) && vuelo.getEstado().equals(estado)){
				listaVuelos.add(vuelo);
			}
		}	
		return listaVuelos;
	}
}
